package common.config.mybatisplus;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * MyBatisPlus配置
 *
 * @author 米泽鹏
 * @since 2023-11-4 下午 1:33
 */
@Configuration
public class MyBatisPlusConfig {

	/**
	 * MyBatisPlus插件配置<br/>
	 * 使用多个功能需要注意顺序关系，建议使用如下顺序<br/>
	 * 多租户，动态表名<br/>
	 * 分页，乐观锁<br/>
	 * sql性能规范，防止全表更新与删除<br/>
	 * <br/>
	 * 总结: 对sql进行单次改造的优先放入，不对sql进行改造的最后放入<br/>
	 */
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		// 分页
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
		// 乐观锁
		interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
		// 防止全表更新与删除
		interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
		return interceptor;
	}

}
